﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using DAL;
using BOL;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using System.Data;
using UtilityExtensions;

namespace UILGestion.Admin.Obras
{
    public partial class ObraEditForm : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {

                    internalid.Value = Request.Params["id"];

                    type.Value = (string)Request.QueryString["type"];
                    type.Value = type.Value == "" ? "A" : type.Value;
                    menuCtrl1.loadMenuSeguridad();
                    FormatForm();
                    
                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
        }
        protected void btnSaveContinue_Click(object sender, EventArgs e)
        {
          //  saveButton.Enabled = false;
            try
            {

                if ((sender as Button).Text == "Guardar")
                {

                    ObraBL obra = new ObraBL();
                    DataSet ds = new DataSet();

                    if (type.Value == "E")
                    {

                         obra.update(PopulateObject(), ds);
                    }
                    else
                    {
                        internalid.Value=obra.add(PopulateObjectInsert(), ds).ToString();
                    }
                        Response.Redirect("ObraReadForm.aspx?id=" + internalid.Value, true);
                    
                }
                if ((sender as Button).Text == "Cancelar")
                {
                    Response.Redirect("ObraListForm.aspx");
                }
                if ((sender as Button).ID== "refreshButton")
                {
                    FormatForm();
                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }




        }
        private List<DAL.Proyecto> getProyectos(int idEmpresa)
        {

            dbGestionDataContext _db =
                new dbGestionDataContext(Parametros.strConnString);


            IQueryable<DAL.Proyecto> q;

            q = from r in _db.Proyectos
                where r.idEmpresa==idEmpresa
                select r;


            List<DAL.Proyecto> e = new List<DAL.Proyecto>();
            DAL.Proyecto proyectoTodo = new DAL.Proyecto();
            proyectoTodo.idInternal = 0;
            proyectoTodo.descripcion = "----Seleccion Proyecto----";
            e.Add(proyectoTodo);
            e.AddRange(q.ToList());

            return e;

        }
        private List<Paise> getPais()
        {
            
            var s = from r in DbUtil.Db.Paises
                    select r;

            List<Paise> a = s.ToList();
            Paise todoPais = new Paise();
            todoPais.IN_ID_PAIS = 0;
            todoPais.VC_NOMBRE = "----Seleccion Pais----";
            a.Add(todoPais);


            return a.OrderBy(w => w.IN_ID_PAIS).ToList();
        }
        private List<Ciudade> getCuidades(int pais)
        {

            IQueryable<Ciudade> s;
            s = from r in DbUtil.Db.Ciudades
                where r.IN_ID_PAIS == pais
                select r;

            List<Ciudade> b = new List<Ciudade>();
            Ciudade todoDepartamento = new Ciudade();
            todoDepartamento.IN_ID_PAIS = 0;
            todoDepartamento.VC_NOMBRE = "----Seleccion Departamento----";
            b.Add(todoDepartamento);
            b.AddRange(s.ToList());


            return b;
        }
        private List<Provincia> getProvincias(int ciudad)
        {

            var s = from r in DbUtil.Db.Provincias
                    where r.IN_ID_CIU == ciudad
                    select r;
            List<Provincia> b = s.ToList();
            Provincia todoDepartamento = new Provincia();
            todoDepartamento.IN_ID_PRO = 0;
            todoDepartamento.VC_NOMBRE = "----Seleccion Provincias----";
            b.Add(todoDepartamento);


            return b.OrderBy(w => w.IN_ID_PRO).ToList();

        }
        private List<Distrito> getDistritos(int provincia)
        {

            var s = from r in DbUtil.Db.Distritos
                    where r.IN_ID_PRO == provincia
                    select r;

            List<Distrito> c = s.ToList();
            Distrito distritoTodo = new Distrito();
            distritoTodo.IN_ID_DIS = 0;
            distritoTodo.VC_NOMBRE = "----Seleccion Distrito----";
            c.Add(distritoTodo);


            return c.OrderBy(w => w.IN_ID_DIS).ToList();
        }
        private void ShowAllComboBox()
        {



            proyectoDropDownList.Items.Clear();
            paisDropDownList.Items.Clear();
            departamentoDropDownList.Items.Clear();
            provinciaDropDownList.Items.Clear();
            distritoDropDownList.Items.Clear();
            

            empresaDDL.DataSource = DbUtil.Db.Empresas;
            empresaDDL.DataTextField = "descripcion";
            empresaDDL.DataValueField = "idInternal";
            empresaDDL.DataBind();

            if (type.Value=="A")
                loadTipoProyecto();


            paisDropDownList.DataSource = getPais();
            paisDropDownList.DataTextField = "VC_NOMBRE";
            paisDropDownList.DataValueField = "IN_ID_PAIS";
            paisDropDownList.DataBind();



            departamentoDropDownList.DataTextField = "VC_NOMBRE";
            departamentoDropDownList.DataValueField = "IN_ID_CIU";
            //departamento.DataBind();



            //departamento.DataSource = getCuidades();
            provinciaDropDownList.DataTextField = "VC_NOMBRE";
            provinciaDropDownList.DataValueField = "IN_ID_PRO";


            //distrito.DataSource = getDistritos();
            distritoDropDownList.DataTextField = "VC_NOMBRE";
            distritoDropDownList.DataValueField = "IN_ID_DIS";
            //distrito.DataBind();

            actividadDropDownList.DataTextField = "descripcion";
            actividadDropDownList.DataValueField = "idInternal";


                actividadDropDownList.DataSource = DbUtil.Db.TipoObras.ToList();
                actividadDropDownList.DataBind();

                if (type.Value == "E")
                {
                    loadTipoProyecto();
                }
            
        }

        private Obra PopulateObject()
        {
            //(DD/MM/yyyy)
            System.IFormatProvider MiFp =
                new System.Globalization.CultureInfo("es-ES", false);


            Obra obra = new Obra();

            obra.idInternal =int.Parse(internalid.Value);
          
            obra.descripcion = descripcionTextBox.Text.Trim();
            obra.direccion = direccionTextBox.Text.Trim();
            obra.idpais = Convert.ToInt32(paisDropDownList.SelectedValue);
            obra.pais = paisDropDownList.SelectedItem.Text; ;
            obra.iddepartamento = Convert.ToInt32(departamentoDropDownList.SelectedValue);
            obra.departamento = departamentoDropDownList.SelectedItem.Text;
            obra.iddistrito = Convert.ToInt32(distritoDropDownList.SelectedItem.Value);
            obra.distrito = distritoDropDownList.SelectedItem.Text;
            obra.provincia = provinciaDropDownList.SelectedItem.Text;
            obra.idprovincia = Convert.ToInt32(provinciaDropDownList.SelectedValue);
            obra.tipoCambio = decimal.Parse(TipoCambioTextBox.Text);
            obra.centroCosto = centroCostoTextBox.Text;
            obra.direcccionEntrega = direccionEntreTextBox.Text;
            obra.direccionFacturacion = direccionFacturacionTextBox.Text;
            //obra.estructuraPorc = Convert.ToDecimal(estructuraTextBox.Text);
            //obra.gastosPorc = Convert.ToDecimal(gastoTextBox.Text);
            obra.incluyeIGV = incluyeIGVCheckBox.Checked;
            obra.cliente = ClienteTextBox.Text;
            //obra.utilidadPorc = Convert.ToDecimal(utilidadTextBox.Text);
            obra.responsableEntrega = responsableEntregaTextBox.Text;
            obra.idTipoObra= int.Parse(actividadDropDownList.SelectedValue);
            obra.fechaInicio = DateTime.ParseExact(fechaTextBox.Text, "dd/MM/yyyy", MiFp);

           
            obra.idProyecto = int.Parse(proyectoDropDownList.SelectedValue);
            obra.usuarioMod = (int)Session["idEmpleado"];
            
            return obra;
        }


        private void populateObjectForm()
        {
            dbGestionDataContext _db =
                new dbGestionDataContext(Parametros.strConnString);

            Obra obra =
                _db.Obras.Single(p => p.idInternal == int.Parse(internalid.Value));

            empresaDDL.SelectedValue = obra.Proyecto.idEmpresa.ToString();
            loadTipoProyecto();
            proyectoDropDownList.SelectedValue = obra.idProyecto.ToString();
            codigoLabel.Text = obra.codigo;
            descripcionTextBox.Text = obra.descripcion;
            direccionTextBox.Text = obra.direccion;
            TipoCambioTextBox.Text = obra.tipoCambio.ToString();
            paisDropDownList.SelectedValue = obra.idpais.Value.ToString();
           
            // para los demas ubigeos  desde pais  cargamos los controles

            departamentoDropDownList.DataSource=getCuidades(obra.idpais.Value);
            departamentoDropDownList.DataBind();

            departamentoDropDownList.SelectedValue = obra.iddepartamento.ToString();



            provinciaDropDownList.DataSource = getProvincias(obra.iddepartamento.Value);
            provinciaDropDownList.DataBind();

            provinciaDropDownList.SelectedValue = obra.idprovincia.ToString();


            distritoDropDownList.DataSource = getDistritos(obra.idprovincia.Value);
            distritoDropDownList.DataBind();

            distritoDropDownList.SelectedValue = obra.iddistrito.ToString();




            centroCostoTextBox.Text=obra.centroCosto;
            direccionEntreTextBox.Text=obra.direcccionEntrega;
            
            //estructuraTextBox.Text=obra.estructuraPorc.Value.ToString();
            //gastoTextBox.Text=obra.gastosPorc.Value.ToString();
            //utilidadTextBox.Text = obra.utilidadPorc.Value.ToString();
            
            ClienteTextBox.Text=obra.cliente;
            incluyeIGVCheckBox.Checked = obra.incluyeIGV.Value;
            fechaTextBox.Text = obra.fechaInicio.Value.ToShortDateString();
            responsableEntregaTextBox.Text=obra.responsableEntrega;
            direccionFacturacionTextBox.Text = obra.direccionFacturacion;
            actividadDropDownList.SelectedValue = obra.idTipoObra.ToString();
            

        }
        

        private void FormatForm()
        {
                     


            //string Lang = "es-ES";  //para controlar el idioma 
            ////string Lang = "es";  //para controlar el idioma 
            //System.Threading.Thread.CurrentThread.CurrentCulture =
            //    new System.Globalization.CultureInfo(Lang);
         


            ShowAllComboBox();

            if (type.Value == "E")
            {
                populateObjectForm();
            }
            if (type.Value=="A")
            {

            }
            //restricionesForm();

            //AddPartidaButton.OnClientClick =
            //  WindowPartida.
            //  GetShowReference("../ObraAdmin/PartidaAdicionInsertForm.aspx?id=0&accion=Insert&ds=" + idobjectdsLabel.Text.ToString(), "Registro de Partida") + "return false;";

        }
        private Obra PopulateObjectInsert()
        {
            //(DD/MM/yyyy)
            System.IFormatProvider MiFp =
                new System.Globalization.CultureInfo("es-ES", false);


            Obra obra = new Obra();


            obra.idProyecto = int.Parse(proyectoDropDownList.SelectedValue);
            obra.descripcion = descripcionTextBox.Text.Trim();
            obra.direccion = direccionTextBox.Text.Trim();
            obra.idpais = Convert.ToInt32(paisDropDownList.SelectedValue);
            obra.pais = paisDropDownList.SelectedItem.Text; ;
            obra.iddepartamento = Convert.ToInt32(departamentoDropDownList.SelectedValue);
            obra.departamento = departamentoDropDownList.SelectedItem.Text;
            obra.iddistrito = Convert.ToInt32(distritoDropDownList.SelectedItem.Value);
            obra.distrito = distritoDropDownList.SelectedItem.Text;
            obra.provincia = provinciaDropDownList.SelectedItem.Text;
            obra.idprovincia = Convert.ToInt32(provinciaDropDownList.SelectedValue);

            obra.centroCosto = centroCostoTextBox.Text;
            obra.direcccionEntrega = direccionEntreTextBox.Text;
            //obra.estructuraPorc =Convert.ToDecimal( estructuraTextBox.Text);
            //          obra.gastosPorc = Convert.ToDecimal(gastoTextBox.Text);
            obra.incluyeIGV = incluyeIGVCheckBox.Checked;
            obra.cliente = ClienteTextBox.Text;
            //        obra.utilidadPorc=Convert.ToDecimal(utilidadTextBox.Text);
            obra.direccionFacturacion = direccionFacturacionTextBox.Text;
            obra.tipoCambio = decimal.Parse(TipoCambioTextBox.Text);
            obra.usuarioCre = (int)Session["idEmpleado"];
            obra.responsableEntrega = responsableEntregaTextBox.Text;
            obra.idTipoObra = int.Parse(actividadDropDownList.SelectedValue);
            obra.fechaInicio = DateTime.ParseExact(fechaTextBox.Text, "dd/MM/yyyy", MiFp);

            return obra;
        }
        protected void refreshButton_Click(object sender, EventArgs e)
        {
            try
            {
                FormatForm();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }


        }

        protected void paisDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {

            try
            {
                if (paisDropDownList.Items.Count > 0)
                {
                    int pais = int.Parse(paisDropDownList.SelectedItem.Value);

                    departamentoDropDownList.Items.Clear();
                    departamentoDropDownList.DataSource = getCuidades(pais);
                    departamentoDropDownList.Enabled = true;

                    departamentoDropDownList.DataBind();

                    panelDepartamento.Update();
                }
                else
                {
                    departamentoDropDownList.Enabled = false;
                    panelDepartamento.Update();
                }



            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                   "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                  "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }
        protected void departamentoDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {

                if (departamentoDropDownList.Items.Count > 0)
                {
                    int departamento = int.Parse(departamentoDropDownList.SelectedItem.Value);
                    provinciaDropDownList.Items.Clear();
                    provinciaDropDownList.DataSource = getProvincias(departamento);
                    provinciaDropDownList.DataBind();
                    provinciaDropDownList.Enabled = true;
                    panelProvincia.Update();
                }
                else
                {
                    provinciaDropDownList.Enabled = false;
                    panelProvincia.Update();
                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                   "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                  "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }
        protected void provinciaDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {

                if (provinciaDropDownList.Items.Count > 0)
                {
                    distritoDropDownList.Items.Clear();
                    distritoDropDownList.DataSource = getDistritos(int.Parse(provinciaDropDownList.SelectedValue));
                    distritoDropDownList.DataBind();
                    distritoDropDownList.Enabled = true;
                    panelDistrito.Update();
                }
                else
                {
                    distritoDropDownList.Enabled = false;
                    panelDistrito.Update();
                }

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                   "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                  "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        private void loadTipoProyecto()
        {
            

            proyectoDropDownList.DataSource = new ListValueBL().GetProyectoComprasXEmpresa(empresaDDL.SelectedValue.ToInt());
            proyectoDropDownList.DataTextField = "descripcion";
            proyectoDropDownList.DataValueField = "idInternal";
            proyectoDropDownList.DataBind();

        }
        protected void empresaDDL_SelectedIndexChanged(object sender, EventArgs e)
        {
            loadTipoProyecto();
        }

       
    }
}